Terrain 만들기 #1 : Open GL 을 이용한 Height Map 구현 :: OPEN GL ES[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

OPEN GL ES
[1]
등록일:2018-07-05 12:07:55 (0%)
작성자:
제목:Terrain 만들기 #1 : Open GL 을 이용한 Height Map 구현

참조 페이지 기술

 

참조 1 : BMP Raw Height Map, 카메라 이동, 충돌 처리, Multi Texture 참조

쌈닭인디유 님의 "Height Map"

http://www.misofruit.co.kr/seojewoo/programming/opengl/opengl-8.htm

 

참조 2 : TGA Image Loader , Mesh 구조, Vertex Color, Texture3D 참조

바른생활님의 "3D 텍스쳐를 이용한 식생 분포 지도"

http://cafe.naver.com/gld3d/42

 

Height Map Tool 구현은 다음의 기술 적용을 목표로 진행 한다.

 

기술 1 : BMP Raw 파일을 읽어와서 Height Map 구성

 

기술 2 : 기본 방향키로 카메라 이동

 

기술 3 : Picking 적용

 

기술 4 : 높이값을 Picking 해서 높 낮이 조절하기

 

기술 5 : 변경 된 Data 저장 및 불러오기

 

기술 6 : Texture 불러와서 붙이기

6-1. Map Tile 전부 입히기

6-2. 선택한 Tile에만 입히기

 

기술 7 : <기술4>에 대하여 Spline 적용해서 볼록(오목)하게 높 낮이 조절하기

 

2주 동안 짬짬히 시간을 내서 <기술1> <기술2> <기술 3> 까지 구현을 진행 하였다.

 

Camera는 전(W), 후(S), 좌(A), 우(D), 위로 날기(R), 아래로 날기(F) 가 가능하며

마우스로 Yawing과 Pitch 각도 변환이 가능.

기존 쌈닭님 코드는 오일러 변환 이었는데, 이를 Quaternion 변환으로 수정 함.

(사원수 변환이 맞는지는 모르겠지만 동작은 합니다 ^ㅁ^;)

 

결과물은 아래와 같다.

 

BMP File은 http://s3.invisionfree.com/The_Carnivores_Saga/ar/t1161.htm   페이지 에서 얻은 아래의 이미지를 이용 하였다.

(2048x2048 과 1024x1024 두 가지를 구현 해봄)

 

 

 

 

<glMultiTexCoord2fARB 를 이용해서 2개의 텍스쳐 합성 : 쌈닭인디유님 거 참조>

 

 

<glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 를 이용해서 Wire Frame 표현>

 

 

<glTexImage3D(); 함수를 이용해서 6개의 이미지 합성 : 바른 생활님거 참조>

 

 

<Per Vertex Color 를 이용한 표현 : 바른생활님거 참조>

 

 

마지막으로 Game Programming Gems vol.1 의 "4.17 프렉탈 지형 생성 - 단층 변형" 장에서 "침식 작용의 표현"

을 참조해서 정점 X, Y, Z 에 대해서 Low pass filter 처리를 해주었다.

 

<Low pass filter 를 이용해서 LERP 처리를 하지 않았을 경우>

 

 

 

<Low pass filter 를 이용해서 LERP 처리를 해주었을 경우>

 

 

LERP 처리를 해줄 경우, 급 경사가 약간 부드러워 진다.

 

// CBMPTR.cpp

float CBMPTR::terrainFilterLerp(float value1, float value0)
{
     float kCoff = 0.5f;
 
     value1 = kCoff * value1 + (1.0f - kCoff)*value0;

 

     return value1;

 

 

// In MeshFiller.cpp

int CMeshFiller::FillWithBMPTR(CMesh* pMesh , CBMPTR* pBMP)

{

     x = pBMP->terrainFilterLerp(x, v0[0]);
     y = pBMP->terrainFilterLerp(y, v0[1]);
     z = pBMP->terrainFilterLerp(z, v0[2]);

}

 

 

---------------------

Height Map 자체가 워낙 많은 책(Direct X 용 책 과 해골 책 등)들에서 설명 하고 있으며,

위에 언급한 쌈닭님과 바른생활님 페이지에서도 잘 설명이 되어 있습니다.

 

프로젝트 소스는 Google Page(http://code.google.com/p/myastro/) 올렸습니다.

혹 필요하신 분은 참고하십시요 ^ㅁ^;

[본문링크] Terrain 만들기 #1 : Open GL 을 이용한 Height Map 구현
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=34674
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.